import store from "@/store";
import axios from "axios";
import { Dialog, Toast } from 'vant'
import router from "@/leeRouter"

const baseUrl = 'http://smart-shop.itheima.net/index.php?s=/api/'

const instance = axios.create({
    baseURL: baseUrl,
    timeout: 5000
})


//所有请求设置了授权头信息【请求头中设置cookie信息，一直携带，判权】
// axios.defaults.headers.common['Authorization'] = `${cookie}`;

//这里是设置发送json格式参数
axios.defaults.headers.post['Content-Type'] = 'application/json';

// 自定义配置 - 请求/响应 拦截器
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // 开启loading，禁止背景点击 (节流处理，防止多次无效触发)
    Toast.loading({
      message: '加载中...',
      forbidClick: true, // 禁止背景点击
      loadingType: 'spinner', // 配置loading图标
      duration: 0 // 不会自动消失
    })
  
    // 只要有token，就在请求时携带，便于请求需要授权的接口 
    const token = store.getters.token
    if (token) {
      config.headers['Access-Token'] = token 
    }
    config.headers.platform = 'H5'
  
    return config
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  })


// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么 (默认axios会多包装一层data，需要响应拦截器中处理一下)
    const res = response.data

    // console.log('------' + JSON.stringify(res))
    if (res.status !== 200) {
      // 给错误提示, Toast 默认是单例模式，后面的 Toast调用了，会将前一个 Toast 效果覆盖
      // 同时只能存在一个 Toast

      // 判断登录态
      if(res.status == 401 && res.message == '没有找到用户信息'){

        Dialog.alert({
          title: '提示',
          message: '当前未登录, 请前往登录',
        }).then(() => {
          console.log('--------- denglu ----------')
          // on close
          router.push({path:'/login', query:{goback: true}})
        });
                    
      } else {

        Toast(res.message)
        // 抛出一个错误的promise
        return Promise.reject(res.message)
      }

    } else {
      // 正确情况，直接走业务核心逻辑，清除loading效果
      Toast.clear()
    }
    return res
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
            console.log(JSON.stringify(error))
    return Promise.reject(error)
  })
  
  // 导出配置好的实例
  export default instance
  

